home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------------------------
- :Program. GroupContents
- :Contents. shows contents of one group in UMS' messagebase
- :Author. Kai Bolay [kai]
- :Address. Snail Mail: EMail:
- :Address. Hoffmannstraße 168 UUCP: kai@amokle.stgt.sub.org
- :Address. D-71229 Leonberg FIDO: 2:2407/106.3
- :History. v1.0 [kai] 25-Mar-93 (added Martin's suggestion)
- :History. v1.1 [kai] 15-Apr-93 (added SERVER keyword, better Login() failure)
- :History. v1.2 [kai] 22-Sep-93 (updated for V40 Intefaces)
- :Copyright. Public Domain
- :Language. Oberon
- :Translator. AMIGA OBERON v3.01d
- :Imports. ums
- ------------------------------------------------------------------------ *)
- MODULE GroupContents;
-
- IMPORT
- ums,
- I: Intuition, d: Dos, e: Exec, u: Utility,
- NoGuru, Break,
- y: SYSTEM;
- CONST
- Template = "USER/A,PASSWORD/A,SERVER/K,GROUP/A,NEW/S\o$VER: GroupContents 1.2 (22.9.93)\n\r";
- VAR
- RD: d.RDArgsPtr;
- Args: STRUCT (dummy: d.ArgsStruct)
- name: e.STRPTR;
- password: e.STRPTR;
- server: e.STRPTR;
- group: e.STRPTR;
- new: I.LONGBOOL;
- END;
- acc: LONGINT;
- res, last: LONGINT;
- From, Subject: e.STRPTR;
-
- (* $Debug- *)
- PROCEDURE CheckErr;
- VAR
- err: INTEGER;
- txt: ums.STRPTR;
- BEGIN
- err := ums.ErrNum (acc);
- IF err # ums.ok THEN
- txt := ums.ErrTxt (acc);
- d.PrintF ("UMS-error: %ld, \"%s\"\n", err, txt);
- HALT (20);
- END;
- END CheckErr;
- (* $Debug= *)
-
- BEGIN
- RD := d.ReadArgs (Template, Args, NIL);
- IF RD = NIL THEN
- d.PrintF ("Usage: %s\n", y.ADR (Template));
- HALT (20);
- END;
- (* $OddChk- $NilChk- *)
- acc := ums.UMSRLogin (Args.server^, Args.name^, Args.password^);
- (* $OddChk= $NilChk= *)
- IF acc <= 0 THEN
- d.PrintF ("Unable to login\n");
- HALT (20);
- END;
-
- (* clear local flags 0, 1 and 2 on all messages *)
- res := ums.UMSSelectTags (acc, ums.tagSelWriteLocal, I.LTRUE,
- ums.tagSelSet, LONGSET {},
- ums.tagSelUnset, LONGSET {0,1,2},
- u.done);
- CheckErr;
-
- (* set local flag 1 on all messages of this group *)
- res := ums.UMSSelectTags (acc, ums.tagSelWriteLocal, I.LTRUE,
- ums.tagSelQuick, I.LTRUE,
- ums.tagGroup, Args.group,
- ums.tagSelSet, LONGSET {1},
- ums.tagSelUnset, LONGSET {},
- u.done);
- CheckErr;
-
- (* set local flag 2 on all accessable messages *)
- res := ums.UMSSelectTags (acc, ums.tagSelWriteLocal, I.LTRUE,
- ums.tagSelSet, LONGSET {2},
- ums.tagSelUnset, LONGSET {},
- ums.tagSelMask, LONGSET {ums.ViewAccess, ums.ReadAccess},
- ums.tagSelMatch, LONGSET {ums.ViewAccess, ums.ReadAccess},
- u.done);
- CheckErr;
-
- (* set local flag 0 on all messages with flag 1 AND flag 2 set *)
- res := ums.UMSSelectTags (acc, ums.tagSelWriteLocal, I.LTRUE,
- ums.tagSelSet, LONGSET {0},
- ums.tagSelUnset, LONGSET {},
- ums.tagSelReadLocal, I.LTRUE,
- ums.tagSelMask, LONGSET {1,2},
- ums.tagSelMatch, LONGSET {1,2},
- u.done);
- CheckErr;
-
- IF Args.new = I.LTRUE THEN
- (* clear local flag 0 on all old messages *)
- res := ums.UMSSelectTags (acc, ums.tagSelWriteLocal, I.LTRUE,
- ums.tagSelSet, LONGSET {},
- ums.tagSelUnset, LONGSET {0},
- ums.tagSelMask, LONGSET {ums.Old},
- ums.tagSelMatch, LONGSET {ums.Old},
- u.done);
- CheckErr;
- END;
-
-
- last := 0;
- LOOP
- (* find next message with flag 0 set *)
- last := ums.UMSSearchTags (acc, ums.tagSearchLocal, I.LTRUE,
- ums.tagSearchLast, last,
- ums.tagSearchMask, LONGSET {0},
- ums.tagSearchMatch, LONGSET {0},
- u.done);
- CheckErr;
-
- IF last = 0 THEN EXIT END; (* no more messages? *)
-
- (* read from/subject of the message *)
- IF ums.ReadUMSMsgTags (acc, ums.tagMsgNum, last,
- ums.tagRFromName, y.ADR (From),
- ums.tagRSubject, y.ADR (Subject),
- u.done) THEN END;
- CheckErr;
-
- d.PrintF ("%5ld %-20.20s %-40.40s\n", last, From, Subject);
-
- (* free the buffers belonging to the message *)
- ums.FreeUMSMsg (acc, last);
- END;
- CLOSE
- IF acc # NIL THEN
- ums.Logout (acc); acc := 0;
- END;
- IF RD # NIL THEN
- d.FreeArgs (RD); RD := NIL;
- END;
- END GroupContents.
-